#include<p18cxxx.h>
#include"config.h"



//###############################################################################################################
//###############################################################################################################
//################# 	This file contains rules to control the motor 				#############################
//################# as per the voltage and water levels or fluctuation in supply	#############################
//###############################################################################################################
//###############################################################################################################


//over under voltage function to set the struct bit for display
void v_over(unsigned int volt)
{
						//convert the adc value to voltage
if(volt>230000 && volt<170000)
statusbits.volt_status=1;
else
statusbits.volt_status=0;
}


void uptank(unsigned int level)
{
level =level*1;			//convert into voltage


statusbits.sensor_up=1;		//set the sensor level in status
}


void sump(unsigned int level)
{
level =level*1;			//convert into voltage


statusbits.sensor_bot=1;		//set the sensor level in status
}



//#################################################################################################
//###################	note: mode bits doesnot decide the actual status ##########################
//###################	of the device but do inform the control function ##########################
//###################	about user requirement							 ##########################
//###################	INT0 for  auto/manual, INT1 for on/0ff			 ##########################
//#################################################################################################
void mode_control(void)					
{
if(INTCONbits.INT0IF==1 )						//if mode button is pressed			
{
statusbits.mode_0=!statusbits.mode_0;			//toggle the device mode to auto<>manual
}

if(statusbits.mode_0==1 & INTCON3bits.INT1IF==1 )		//if device is in manual mode and on/off button pressed
{
statusbits.mode_1=!statusbits.mode_1;				//toggle the device state;
}}




//########################################################################
//###################							##########################
//###################  		Controll according to flowchart					##########################
//################### 							##########################
//###################							##########################
//########################################################################

void device_control(void)
{
	if(statusbits.motor_status)		//motor is running
	{
		if(statusbits.volt_status)		//motor is running voltage out of range
		{
			statusbits.motor_status=0;		//set device status to low
		}
		else if(statusbits.sensor_bot==0 | statusbits.sensor_up==2)		// sump has no water or tank is full
		{
			statusbits.motor_status=0;		//set device status to low
		}
	}

	else if(statusbits.volt_status==0)			//motor is not running voltage is fine
	{
		if(statusbits.sensor_bot>0 & statusbits.sensor_up<1 & statusbits.mode_0==0)	//sump has water and tank is at low level and auto mode selected
		{
			statusbits.motor_status=1;			//set device status to high
		}
		else if(statusbits.mode_0==1 & statusbits.mode_1==1)		//if in manual mode device has been switched on
		{
			statusbits.motor_status=1;			//set device status to high
		}
	}


	if(statusbits.motor_status!=LATEbits.LATE0)
	{
		LATEbits.LATE0=!LATEbits.LATE0;
	}
}

/*
void AD_O1(void)
{
if(ADCON0bits.GO==0)
{
sensor_a=(ADRESH*256)+ADRESL;//voltage drop in uptank sensor is stored in adc 
ADCON0bits.GO=1;
sensor_mode1();
}
}
void sensor_mode1(void)
{
if(sensor_a==11001101)//if volt drop in uptank sensor is 1v(digital value=205)
{
statusbits.sensor_up=1;// the lower sensor in uptank has volt drop of 1v while motor keeps running
}
else 
{
statusbits.sensor_up=0;
sump();
}
if(sensor_a==110011001)//if volt drop in uptank sensor is 2v(digital value=409)
{
statusbits.sensor_up=2;// the upper sensor volt drop in uptank is 2v(correspondingly motor turns off)
}
else
{
statusbits.sensor_up=0;
sump();
}
}

void AD_O2(void)
{
 if(ADCON0bits.GO==0)
{
sensor_b=(ADRESH*256)+ADRESL;//stores the digital value of volt drop in sensor at sump
ADCON0bits.GO=1;
sensor_mode2();
}
}



void sensor_mode2(void)
{
if(sensor_b==11001101)
{
statusbits.sensor_bot=1;//motor is on
}
else 
{
statusbits.sensor_bot=0;// motor is off
}
}
*/


